home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 42 / Amiga Format AFCD42 (Issue 126, Aug 1999).iso / -serious- / hardware / blizkick / modules / replace.asm < prev    next >
Assembly Source File  |  1999-05-17  |  2KB  |  120 lines

  1. ; FILE: Source:modules/Replace.ASM          REV: 12 --- Replacing Module for BlizKick
  2.  
  3. ;
  4. ; Example BlizKick Module
  5. ; ~~~~~~~~~~~~~~~~~~~~~~~
  6. ; This code shows how to create replacing BlizKick "Module".
  7. ; Should be quite self-explonary... (?)
  8. ;
  9. ; !CODE MUST BE FULLY PC-RELATIVE!
  10. ;
  11. ; Written by Harry Sintonen.
  12. ; This source code is Public Domain.
  13. ;
  14.  
  15.     incdir    "include:"
  16.     include    "exec/execbase.i"
  17.     include    "blizkickmodule.i"    ; Some required...
  18.  
  19. _LVORawDoFmt        EQU    -$20A
  20. _LVOOpenLibraryTagged    EQU    -$32A
  21. _LVOTimedDisplayAlert    EQU    -$336
  22. _LVOCloseLibrary    EQU    -$19E
  23.  
  24.  
  25.     SECTION    MODULE,CODE
  26. _DUMMY_LABEL
  27.  BK_MOD BKMF_ReplaceMode!BKMF_ExtResBuf,_end,(RTF_COLDSTART)<<24+39<<16+NT_UNKNOWN<<8+$C9,_name,_name,_init
  28.  
  29. ; Replace mode on, requires EXTRESBUF buffer, COLDSTART module, requires KS V39.x or better,
  30. ; module type NT_UNKNOWN, priority -55.
  31.  
  32. STACKBUF    EQU    200
  33.  
  34. _init    clr.l    (0).W
  35.     movem.l    d2/d7/a2/a3/a6,-(sp)
  36.     move.l    (LastAlert,a6),d2
  37.     moveq    #-1,d0            ; Display no alert?
  38.     cmp.l    d0,d2
  39.     beq.b    .exit
  40.  
  41.     lea    (-STACKBUF,sp),sp
  42.     move.l    sp,a3
  43.     lea    (SoftFail,pc),a0
  44.     move.l    d2,d0
  45.     swap    d0
  46.     cmp.b    #1,d0
  47.     bne.b    .skip0
  48.     lea    (NoMem,pc),a0
  49.     bra.b    .skip1
  50.  
  51. .skip0    btst    #$1F,d2
  52.     bne.b    .skip1
  53.     tst.w    d0
  54.     beq.b    .skip1
  55.     lea    (Recoverable,pc),a0
  56. .skip1    bsr.b    .dostr
  57.     lea    (PressLeftie,pc),a0
  58.     bsr.b    .dostr
  59.     clr.b    (a3)+
  60.  
  61.     lea    (ErrorFmt,pc),a0
  62.     lea    (LastAlert,a6),a1
  63.     lea    (.PutChar,pc),a2
  64.     jsr    (_LVORawDoFmt,a6)
  65.  
  66. .try    moveq    #3,d0            ; 3=intuition.library
  67.     jsr    (_LVOOpenLibraryTagged,a6)
  68.     tst.l    d0
  69.     beq.b    .try            ; crash!
  70.     move.l    (LastAlert+3*4,a6),a1
  71.     move.l    a6,a3
  72.     move.l    d0,a6
  73.     move.l    d2,d0
  74.     move.l    sp,a0
  75.     moveq    #40,d1
  76.     jsr    (_LVOTimedDisplayAlert,a6)
  77.     move.l    d0,a2
  78.     move.l    a6,a1
  79.     move.l    a3,a6
  80.     jsr    (_LVOCloseLibrary,a6)
  81.  
  82.     lea    (STACKBUF,sp),sp
  83.     clr.l    (0).W
  84.     moveq    #-1,d0            ; No alert on next round, please!
  85.     move.l    d0,(LastAlert,a6)
  86. .exit    move.l    a2,d0
  87.     movem.l    (sp)+,d2/d7/a2/a3/a6
  88.     rts
  89.  
  90. .dostr    clr.b    (a3)+
  91. .copy    move.b    (a0)+,(a3)+
  92.     bne.b    .copy
  93.     st    (a3)+
  94.     rts
  95.  
  96. .PutChar    move.b    d0,(a3)+
  97.     clr.b    (a3)
  98.     rts
  99.  
  100. _name    dc.b    'alert.hook',13,10,0
  101.  
  102. NoMem    dc.b    38,15
  103.     dc.b    'Not enough memory. ',0
  104. SoftFail    dc.b    38,15
  105.     dc.b    'Software Failure. ',0
  106. Recoverable    dc.b    38,15
  107.     dc.b    'Recoverable Alert. ',0
  108. PressLeftie    dc.b    234,15
  109.     dc.b    'Press left mouse button to continue.',0
  110. ErrorFmt    dc.b    142,30
  111.     dc.b    'Error:  %04x %04x   Task:  %08lx',0
  112.  
  113.     CNOP    0,2
  114. _end
  115.  
  116.  
  117.     SECTION    VERSION,DATA
  118.  
  119.     dc.b    '$VER: alert.hook_MODULE 1.1 (11.9.96)',0
  120.